package org.csu.mybigpro.service.impl;

import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.RemoveObjectArgs; // 导入 RemoveObjectArgs
import org.csu.mybigpro.service.MinioService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.util.UUID;
import java.net.URL; // 导入 URL 类

@Service
public class MinioServiceImpl implements MinioService {

    @Autowired
    private MinioClient minioClient;

    @Value("${minio.bucket-name}")
    private String bucketName;

    @Value("${minio.endpoint}")
    private String minioEndpoint;

    @Override
    public String uploadFile(MultipartFile file) throws Exception {
        if (file.isEmpty()) {
            throw new IllegalArgumentException("文件内容不能为空。");
        }

        String originalFilename = file.getOriginalFilename();
        String objectName = UUID.randomUUID().toString() + "-" + originalFilename;

        minioClient.putObject(
                PutObjectArgs.builder()
                        .bucket(bucketName)
                        .object(objectName)
                        .stream(file.getInputStream(), file.getSize(), -1)
                        .contentType(file.getContentType())
                        .build());

        return minioEndpoint + "/" + bucketName + "/" + objectName;
    }

    /**
     * 从MinIO的完整URL中提取对象名称。
     * 假设URL格式为: http://endpoint:port/bucketName/objectName
     */
    @Override
    public String getObjectNameFromUrl(String fileUrl) {
        if (fileUrl == null || fileUrl.isEmpty()) {
            return null;
        }
        try {
            // 使用java.net.URL解析URL
            URL url = new URL(fileUrl);
            String path = url.getPath(); // 例如：/bucketName/objectName
            // 分割路径并获取最后一个部分作为对象名
            String[] parts = path.split("/");
            if (parts.length > 0) {
                // 最后一个部分通常是对象名
                return parts[parts.length - 1];
            }
        } catch (Exception e) {
            System.err.println("解析MinIO URL失败: " + fileUrl + ", 错误: " + e.getMessage());
            return null;
        }
        return null;
    }

    /**
     * 从MinIO中删除文件。
     */
    @Override
    public void deleteFile(String objectName) throws Exception {
        if (objectName == null || objectName.isEmpty()) {
            throw new IllegalArgumentException("对象名称不能为空。");
        }
        minioClient.removeObject(
                RemoveObjectArgs.builder()
                        .bucket(bucketName)
                        .object(objectName)
                        .build());
    }
}